#include	"Serveur.h"
#include	<stdlib.h>
#include	<sstream>

Serveur::Serveur(){
	this->utilisateurs = new map<string,Utilisateur*>();
	this->categories = new map<int,Categorie*>();
	this->groupes = new map<int,Groupe*>();
	this->utilisateursConnectes = new map<int,string>();
	this->sessions = new map<int,map<string,string>*>();

	this->utilisateurs_it = this->utilisateurs->begin();
	this->categories_it = this->categories->begin();
	this->groupes_it = this->groupes->begin();
}

Serveur::~Serveur(){
	delete this->utilisateurs;
	delete this->categories;
	delete this->groupes;
	delete this->utilisateursConnectes;
	delete this->sessions;
}

void Serveur::initCommunication(int portCom, int portBroadcast, int tailleTampon){
	//Initialisation du serveur TCP
	this->communicateur = new ServeurTCP(portCom, tailleTampon,this);
	//Initialisation du serveur UDP
	this->broadcast = new ServeurUDP(portBroadcast, tailleTampon);//TODO passer le listenner
	while(true){
		int desc = this->communicateur->accepter();
		cout<<"Nouveau client : "<<desc<<endl;
		this->communicateur->creationThread(desc);
	}

}

int Serveur::creerCategorie(string nom){ 
	int id = this->categories->size();
	while(this->getCategorie(id)!=NULL)
		id++;
	Categorie * c = new Categorie(id,nom);
	this->categories->insert(pair<int,Categorie*>(id,c));
	this->categories_it = this->categories->begin(); //reinitialisation de l'iterateur
	return id;
}

void Serveur::supprimerCategorie(int id){
	this->categories_it = this->categories->find(id);
	if(this->categories_it != this->categories->end()){
		this->categories->erase(id); //suppression de la reference
	}
	//delete this->getCategorie(id); //liberation de la memoire
	this->categories_it = this->categories->begin(); //reinitialisation de l'iterateur
	return;
}

string Serveur::creerUtilisateur(string nom){
	if(this->getUtilisateur(nom)!=NULL)
		return "";
	Utilisateur * u = new Utilisateur(nom);
	this->utilisateurs->insert(pair<string,Utilisateur*>(nom,u));
	this->utilisateurs_it = this->utilisateurs->begin(); //reinitialisation de l'iterateur
	return nom;
}

void Serveur::supprimerUtilisateur(string nom){
	return;
}

int Serveur::creerGroupe(string nom){
	return 0;//TODO
}

void Serveur::supprimerGroupe(int id){
	return;
}

void Serveur::majIterateurs(){
	this->utilisateurs_it = this->utilisateurs->begin();
	this->categories_it = this->categories->begin();
	this->groupes_it = this->groupes->begin();
}

Categorie* Serveur::getCategorie(int id){
	if(this->categories->empty()){
		cout<<"< Le Wiki est vide >"<<endl;
		return NULL;
	}
	if(id < 0){ //parcours par iterateur
		Categorie* c = (*categories_it).second;
		this->categories_it++;
		return c;
	}
	else{ //retour normal
		map<int,Categorie*>::iterator it = this->categories->find(id);
		if(it==this->categories->end()){
			return NULL;
		}
		else{
			return it->second;
		}
	}
}

Groupe* Serveur::getGroupe(int id){
	if(id >= (int)this->groupes->size()){
		cout<<"L'identifiant "<<id<<" ne correspond a aucune groupe"<<endl;
		return NULL;
	}
	if(this->groupes->empty()){
		cout<<"< Le Wiki est vide >"<<endl;
		return NULL;
	}
	if(id < 0){ //parcours par iterateur
		Groupe* g = (*groupes_it).second;
		this->groupes_it++;
		return g;
	}
	else{ //retour normal
		map<int,Groupe*>::iterator it = this->groupes->find(id);
		if(it==this->groupes->end()){
			return NULL;
		}
		else{
			return it->second;
		}
	}
}

Utilisateur* Serveur::getUtilisateur(string nom){
	//cout<<"getUtilisateur("<<nom<<")"<<endl;
	if(this->utilisateurs->empty()){
		//cout<<" >vide"<<endl;
		return NULL;
	}
	if(nom==""){ //parcours par iterateur
		Utilisateur* u = (*utilisateurs_it).second;
		//cout<<" >iter : "/*<<u*/<<endl;
		this->utilisateurs_it++;
		return u;
	}
	else{ //retour normal
		//cout<<" >direct"<<endl;
		map<string,Utilisateur*>::iterator it = this->utilisateurs->find(nom);
		if(it==this->utilisateurs->end()){
		//cout<<" >>>end (NULL)"<<endl;
			return NULL;
		}
		else{
		//cout<<" >trouve : "<<it->second<<endl;
			return it->second;
		}
	}

}

int Serveur::getCategorieId(string nom){
	this->majIterateurs();
	int id = -1;
	while(Categorie * x = this->getCategorie()){
		if(x->getNom() == nom)
			return x->getId();
	}
	return id;
}

int Serveur::getGroupeId(string nom){
	/*this->majIterateurs();
	int id = -1;
	while(Groupe * x = this->getGroupe()){
		if(x->getNom() == nom)
			return x->getId();
	}
	return id;*/
}


string Serveur::categoriesToString(){
	string s = "";
	this->majIterateurs();
	while(Categorie* c = this->getCategorie()){
		ostringstream oss;
		oss<<c->getId();
		string result = oss.str();
		s+=" "+result+" : "+c->getNom()+"\n";
	}
	if(s=="")
		s=" <vide>";
	s="  WIKI\n=========\n"+s;
	return s;
}

bool Serveur::sessionStart(int descripteur){
	map<int,map<string,string>*>::iterator it1 = this->sessions->find(descripteur);
	if(it1!=this->sessions->end())//la session existe deja
		return false;
	this->sessions->insert(pair<int,map<string,string>*>(descripteur,new map<string,string>()));
	return true;
}

bool Serveur::sessionDestroy(int descripteur){
	map<int,map<string,string>*>::iterator it1 = this->sessions->find(descripteur);
	if(it1!=this->sessions->end()){//la session existe 
		this->sessions->erase(it1);
		return true;
	}
	return false;
}

void Serveur::sessionPrint(int descripteur){
	cout<<"<<< SESSION >>>"<<endl;
		for(map<int,map<string,string>*>::iterator it1 = this->sessions->begin();it1!=this->sessions->end();it1++){
			if(descripteur == -1 || it1->first == descripteur){
				cout<<">session du client "<<it1->first<<endl;
				if(it1->second->empty())
					cout<<" <vide> "<<endl;
				else{
					for(map<string,string>::iterator it2 = it1->second->begin();it2!=it1->second->end();it2++)
						cout<<"\t>> "<<it2->first<<" : "<<it2->second<<endl;
				}
			}
		}
	cout<<endl;
}

	string Serveur::getVarSession(int descripteur, string variable){
		string valeur = "";
		map<int,map<string,string>*>::iterator it1 = this->sessions->find(descripteur);
		if(it1!=this->sessions->end()){//la session existe
			map<string,string> * s = it1->second;
			map<string,string>::iterator it2 = s->find(variable);
			if(it2 != s->end()){
				valeur = it2->second;
			}
		}
		return valeur;
	}

	bool Serveur::setVarSession(int descripteur, string variable, string valeur){
		map<int,map<string,string>*>::iterator it1 = this->sessions->find(descripteur);
		if(it1!=this->sessions->end()){//la session existe
			map<string,string> * s = it1->second;
			map<string,string>::iterator it2 = s->find(variable);
			if(it2 != s->end()) //la variable est ecrasee
				it2->second = valeur;
			else //la variable est cree
				s->insert(pair<string,string>(variable,valeur));
			return true;
		} else {
			return false;
		}
	}

	/* ============== TRAITEMENT ET ENCHAINEMENT DES MENUS ============== */
	int Serveur::action(int numAction, string reponse, int descripteur){
		//variables pour le menu
		string s;
		string t;
		int x;
		int y;


		//Test pour savoir si le client est logge
		string utilisateur = this->getVarSession(descripteur,"utilisateur");
		bool isLogge = false;
		if(utilisateur != ""){
			isLogge = true;
		}

		//Adaptation des menus en fonction de l'etat logge
		int varMENU_ACCUEIL = MENU_ACCUEIL;
		if(isLogge){
			varMENU_ACCUEIL = MENU_ACCUEIL_LOG;
		}


		//Creation de la session
		if(this->sessionStart(descripteur))
			cout<<"Nouvelle session pour le client "<<descripteur<<endl;
		//this->sessionPrint(descripteur);

		int numReponse = atoi(reponse.c_str()); 
		cout<<"\nreponse du client "<<descripteur<<" pour l'action "<<numAction<<" : "<<reponse<<endl;


		switch ( numAction ) {
			/*-----ACCUEIL-----*/
			case MENU_ACCUEIL :
				switch ( numReponse ) {
					case 1:	
						cout<<"REQU_INSCRIPTION_LOGIN"<<endl;
						return REQU_INSCRIPTION_LOGIN;

					case 2:	
						cout<<"REQU_CONNEXION_LOGIN"<<endl;
						return REQU_CONNEXION_LOGIN;

					case 3:	
						cout<<"MENU_LECTURE_WIKI"<<endl;
						return MENU_LECTURE_WIKI;

					case 4:	
						cout<<"QUIT"<<endl;
						return QUIT;

					default:	
						cout<<"Mauvaise saisie"<<endl;
						return varMENU_ACCUEIL;
				}
				/*-----FIN - ACCUEIL-----*/

				/*-----INSCRIPTION-----*/
			case REQU_INSCRIPTION_LOGIN:
				this->majIterateurs();
				if(this->getUtilisateur(reponse)!=NULL){ //le nom est deja pris
					//cout<<this->getUtilisateur(reponse)->getNom()<<endl; //TODO debug
					cout<<"ERR_INSCRIPTION_LOGIN"<<endl;
					return ERR_INSCRIPTION_LOGIN;
				}
				if(!this->setVarSession(descripteur,"login",reponse))
					cout<<"ERREUR : ajout de variable de session"<<endl;

				cout<<"REQU_INSCRIPTION_PASS"<<endl;
				return REQU_INSCRIPTION_PASS;

			case ERR_INSCRIPTION_LOGIN :
				if(reponse=="o") {
					cout<<"REQU_INSCRIPTION_LOGIN"<<endl;
					return REQU_INSCRIPTION_LOGIN;
				} else if(reponse=="n") {
					cout<<"varMENU_ACCUEIL"<<endl;
					return varMENU_ACCUEIL;
				} else {
					cout<<"ERR_INSCRIPTION_LOGIN"<<endl;
					return ERR_INSCRIPTION_LOGIN;
				}

			case REQU_INSCRIPTION_PASS :
				//CREATION D'UN NOUVEL UTILISATEUR
				s = this->getVarSession(descripteur,"login");
				if(this->creerUtilisateur(s)!=s)
					cout<<"ERREUR : creation de l'utilisateur"<<s<<endl;
				this->getUtilisateur(s)->setPswd(reponse);
				this->setVarSession(descripteur,"utilisateur",s);
				cout<<"MENU_ACCUEIL_LOG"<<endl;
				return MENU_ACCUEIL_LOG;

				/*-----CONNEXION-----*/
			case REQU_CONNEXION_LOGIN:
				if(this->getUtilisateur(reponse)==NULL){
					cout<<"ERR_CONNEXION_LOGIN"<<endl;
					return ERR_CONNEXION_LOGIN;
				}
				this->setVarSession(descripteur,"login",reponse);
				cout<<"REQU_CONNEXION_PASS"<<endl;
				return REQU_CONNEXION_PASS;

			case ERR_CONNEXION_LOGIN :
				if(reponse=="o") {
					cout<<"REQU_CONNEXION_LOGIN"<<endl;
					return REQU_CONNEXION_LOGIN;
				} else if(reponse=="n") {
					cout<<"varMENU_ACCUEIL"<<endl;
					return varMENU_ACCUEIL;
				} else {
					cout<<"ERR_CONNEXION_LOGIN"<<endl;
					return ERR_CONNEXION_LOGIN;
				}

			case REQU_CONNEXION_PASS :
				s = this->getVarSession(descripteur,"login");
				if(this->getUtilisateur(s)->testPswd(reponse)){ // pass OK
					this->setVarSession(descripteur,"utilisateur",s);
					cout<<"MENU_ACCUEIL_LOG"<<endl;
					return MENU_ACCUEIL_LOG;
				} //pass ECHEC
				cout<<"ERR_CONNEXION_PASS"<<endl;
				return ERR_CONNEXION_PASS;
				
			case ERR_CONNEXION_PASS :
				if(reponse=="o") {
					cout<<"REQU_CONNEXION_LOGIN"<<endl;
					return REQU_CONNEXION_LOGIN;
				} else if(reponse=="n") {
					cout<<"varMENU_ACCUEIL"<<endl;
					return varMENU_ACCUEIL;
				} else {
					cout<<"ERR_CONNEXION_PASS"<<endl;
					return ERR_CONNEXION_PASS;
				}


				/*-----MENU_ACCUEIL_LOG-----*/
			case MENU_ACCUEIL_LOG :
				switch ( numReponse ) {
					case 1:	
						cout<<"MENU_LECTURE_WIKI"<<endl;
						return MENU_LECTURE_WIKI;

					case 2:	
						cout<<"MENU_GERER_GROUP"<<endl;
						return MENU_GERER_GROUP;

					case 3:	
						cout<<"MENU_ADMIN"<<endl;
						return MENU_ADMIN;

					case 4:	
						this->sessionDestroy(descripteur);
						cout<<"REQU_DECONNEXION"<<endl;
						return REQU_DECONNEXION;

					default:	
						cout<<"Mauvaise saisie"<<endl;
						return varMENU_ACCUEIL;
				}

			case REQU_DECONNEXION :
				cout<<varMENU_ACCUEIL<<endl;
				return varMENU_ACCUEIL;

				/* ===========LECTURE DU WIKI===========*/

			case MENU_LECTURE_WIKI :
				switch ( numReponse ) {
					case 1:	
						cout<<"REQU_OUVRIR_CAT"<<endl;
						return REQU_OUVRIR_CAT;

					case 2:	
						cout<<"REQU_CREER_CAT"<<endl;
						return REQU_CREER_CAT;

					case 3:	
						cout<<"REQU_SUPPR_CAT"<<endl;
						return REQU_SUPPR_CAT;

					case 4:
						cout<<"varMENU_ACCUEIL"<<endl;
						return varMENU_ACCUEIL;

					default:	
						cout<<"Mauvaise saisie"<<endl;
						return MENU_LECTURE_WIKI;
				}							

				/* ===========CATEGORIES===========*/

			case REQU_OUVRIR_CAT :
				if(this->getCategorie(numReponse)==NULL){//Mauvaise saisie
					cout<<"ERR_OUVRIR_CAT"<<endl;
					return ERR_OUVRIR_CAT;
				}
				this->setVarSession(descripteur,"categorie",reponse);
				cout<<"BROWSE_CAT "<<numReponse<<endl;
				return BROWSE_CAT;

			case ERR_OUVRIR_CAT :
				if(reponse=="o") {
					cout<<"REQU_OUVRIR_CAT"<<endl;
					return REQU_OUVRIR_CAT;
				} else if(reponse=="n") {
					cout<<"MENU_LECTURE_WIKI"<<endl;
					return MENU_LECTURE_WIKI;
				} else {
					cout<<"ERR_OUVRIR_CAT"<<endl;
					return ERR_OUVRIR_CAT;
				}

				
			case REQU_CREER_CAT :
				if(this->getCategorieId(reponse)>=0){//existe deja
					cout<<"ERR_CREER_CAT"<<endl;
					return ERR_CREER_CAT;
				}//existe pas
				x = this->creerCategorie(reponse);
				cout<<"Categorie "<<reponse<<" creee : "<<x<<endl;
				return MENU_LECTURE_WIKI;

			case ERR_CREER_CAT :
				if(reponse=="o") {
					cout<<"REQU_CREER_CAT"<<endl;
					return REQU_CREER_CAT;
				} else if(reponse=="n") {
					cout<<"MENU_LECTURE_WIKI"<<endl;
					return MENU_LECTURE_WIKI;
				} else {
					cout<<"ERR_CREER_CAT"<<endl;
					return ERR_CREER_CAT;
				}

			case REQU_SUPPR_CAT :
				if(this->getCategorie(numReponse)==NULL){//Mauvaise saisie
					cout<<"ERR_SUPPR_CAT"<<endl;
					return ERR_SUPPR_CAT;
				}
				this->supprimerCategorie(numReponse);
				cout<<"Categorie supprimee : "<<reponse<<endl;
				cout<<"BROWSE_CAT "<<numReponse<<endl;
				return MENU_LECTURE_WIKI;

			case ERR_SUPPR_CAT :
				if(reponse=="o") {
					cout<<"REQU_SUPPR_CAT"<<endl;
					return REQU_SUPPR_CAT;
				} else if(reponse=="n") {
					cout<<"MENU_LECTURE_WIKI"<<endl;
					return MENU_LECTURE_WIKI;
				} else {
					cout<<"ERR_SUPPR_CAT"<<endl;
					return ERR_SUPPR_CAT;
				}



			case BROWSE_CAT :
				switch ( numReponse ) {
					case 1:	
						cout<<"REQU_OUVRIR_ART"<<endl;
						return REQU_OUVRIR_ART;

					case 2:	
						cout<<"REQU_CREER_ART"<<endl;
						return REQU_CREER_ART;

					case 3:	
						cout<<"REQU_SUPPR_ART"<<endl;
						return REQU_SUPPR_ART;

					case 4:	
						cout<<"MENU_LECTURE_WIKI"<<endl;
						return MENU_LECTURE_WIKI;

					default:	
						cout<<"Mauvaise saisie"<<endl;
						return BROWSE_CAT;
				}				/* -----  end switch  ----- */

				/* ===========ARTICLES===========*/

			case REQU_OUVRIR_ART :
				s = getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				if(this->getCategorie(x)->getArticle(numReponse)==NULL){//Mauvaise saisie
					cout<<"ERR_OUVRIR_ART"<<endl;
					return ERR_OUVRIR_ART;
				}
				this->setVarSession(descripteur,"article",reponse);
				cout<<"READ_ART "<<numReponse<<endl;
				return READ_ART;
				
			case ERR_OUVRIR_ART :
				if(reponse=="o") {
					cout<<"REQU_OUVRIR_ART"<<endl;
					return REQU_OUVRIR_ART;
				} else if(reponse=="n") {
					cout<<"BROWSE_CAT"<<endl;
					return BROWSE_CAT;
				} else {
					cout<<"ERR_OUVRIR_ART"<<endl;
					return ERR_OUVRIR_ART;
				}

			case REQU_CREER_ART :
				s = this->getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				if(this->getCategorie(x)->getArticleId(reponse)>=0){//existe deja
					cout<<"ERR_CREER_ART"<<endl;
					return ERR_CREER_ART;
				}//existe pas
				x = this->getCategorie(x)->creerArticle(reponse);
				cout<<"Article "<<reponse<<" creee : "<<x<<endl;
				cout<<"BROWSE_CAT"<<endl;
				return BROWSE_CAT;

			case ERR_CREER_ART :
				if(reponse=="o") {
					cout<<"REQU_CREER_ART"<<endl;
					return REQU_CREER_ART;
				} else if(reponse=="n") {
					cout<<"BROWSE_CAT"<<endl;
					return BROWSE_CAT;
				} else {
					cout<<"ERR_CREER_ART"<<endl;
					return ERR_CREER_ART;
				}

			case REQU_SUPPR_ART :
				s = getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				if(this->getCategorie(x)->getArticle(numReponse)==NULL){//Mauvaise saisie
					cout<<"ERR_SUPPR_ART"<<endl;
					return ERR_SUPPR_ART;
				}
				this->getCategorie(x)->supprimerArticle(numReponse);
				cout<<"Article supprimee : "<<reponse<<endl;
				cout<<"BROWSE_CAT "<<numReponse<<endl;
				return BROWSE_CAT;

			case ERR_SUPPR_ART :
				if(reponse=="o") {
					cout<<"REQU_SUPPR_ART"<<endl;
					return REQU_SUPPR_ART;
				} else if(reponse=="n") {
					cout<<"BROWSE_CAT"<<endl;
					return BROWSE_CAT;
				} else {
					cout<<"ERR_SUPPR_ART"<<endl;
					return ERR_SUPPR_ART;
				}


			case READ_ART :
				switch ( numReponse ) {
					case 1:	
						cout<<"EDIT_ART"<<endl;
						return EDIT_ART;
					case 2:	
						cout<<"BROWSE_CAT"<<endl;
						return BROWSE_CAT;
					default:	
						cout<<"Mauvaise saisie"<<endl;
						return READ_ART;

				}	

			case EDIT_ART :
				s = getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				t = getVarSession(descripteur,"article");
				y = atoi(t.c_str());
				this->getCategorie(x)->getArticle(y)->setContenu(reponse);
				return READ_ART;
				

				
				/*-----QUIT-----*/
			case QUIT :
				cout<<"le client s'est deconnecte"<<endl;
				cout<<"destruction de la session du client "<<descripteur;
				if(this->sessionDestroy(descripteur))
					cout<<"\tOK"<<endl;
				else
					cout<<"\tECHEC"<<endl;
				return QUIT;

			default:	
				cout<<"Mauvaise saisie"<<endl;
				return varMENU_ACCUEIL;
		}
	}

	/* =============== CONTENU DES MESSAGES ================ */

	string Serveur::getAction(int numAction, int descripteur){
		//variables
		int x;
		int y;
		string s;
		string t;
		switch ( numAction ) {
			case MENU_ACCUEIL :
				return "\n\nXXXXXXXXXXXXXXXXXXXXX\nXX   WIKIMELOGERE  XX\nXXXXXXXXXXXXXXXXXXXXX\n1 : Inscription\n2 : Connexion\n3 : Lecture du Wiki\n4 : Quitter";

			case REQU_INSCRIPTION_LOGIN :
				return "login : ";

			case ERR_INSCRIPTION_LOGIN :
				return "Le nom que vous avez saisi existe deja.\nVoulez vous saisir un nouveau login? (o/n)";

			case REQU_INSCRIPTION_PASS :
				return "mot de passe : ";

			case REQU_CONNEXION_LOGIN :
				return "login : ";

			case ERR_CONNEXION_LOGIN :
				return "Le login n'existe pas.\nVoulez vous saisir a nouveau le login? (o/n)";

			case REQU_CONNEXION_PASS :
				return "mot de passe : ";

			case ERR_CONNEXION_PASS :
				return "Echec d'identification.\nRecommencer? (o/n)";

			case MENU_ACCUEIL_LOG :
				return "\nuser : "+this->getVarSession(descripteur,"utilisateur")+"\nXXXXXXXXXXXXXXXXXXXXX\nXX   WIKIMELOGERE  XX\nXXXXXXXXXXXXXXXXXXXXX\n1 : Parcours du Wiki\n2 : Gerer mes groupes\n3 : Administrer\n4 : Deconnexion";

			case REQU_DECONNEXION :
				return "Vous etes bien deconnecte.\nAppuyer sur une touche pour retourner a l'accueil.";

			case MENU_LECTURE_WIKI :
				return this->categoriesToString()+"\n\n1 : Ouvrir une categorie\n2 : Creer une nouvelle categorie\n3 : Supprimer une categorie\n4 : Retour a l'accueil";

			case REQU_OUVRIR_CAT :
				return "numero ? ";

			case ERR_OUVRIR_CAT :
				return "la categorie n'existe pas.\nReesayer? (o/n)";

			case REQU_CREER_CAT :
				return "nom ? ";

			case ERR_CREER_CAT :
				return "la categorie existe deja.\nVoulez vous saisir un nouveau nom? (o/n)";

			case REQU_SUPPR_CAT :
				return "numero ? ";

			case ERR_SUPPR_CAT :
				return "la categorie n'existe pas.\nReesayer? (o/n)";

			case BROWSE_CAT :
				s = getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				if(this->getCategorie(x)==NULL){
					cout<<"ERREUR : impossible d'afficher la categorie "<<s<<" car elle n'existe pas."<<endl;
					return "erreur";
				}
				return "\n"+this->getCategorie(x)->toString()+"\n\n1 : Lire un article\n2 : Creer un article\n3 : Supprimer un article\n4 : Retour";

			case REQU_OUVRIR_ART :
				return "numero ? ";

			case ERR_OUVRIR_ART :
				return "l'article n'existe pas.\nReesayer? (o/n)";

			case REQU_CREER_ART :
				return "nom ? ";

			case ERR_CREER_ART :
				return "l'article existe deja.\nVoulez vous saisir un nouveau nom? (o/n)";

			case REQU_SUPPR_ART :
				return "numero ? ";

			case ERR_SUPPR_ART :
				return "l'article n'existe pas.\nReesayer? (o/n)";

			case READ_ART :
				s = getVarSession(descripteur,"categorie");
				x = atoi(s.c_str());
				t = getVarSession(descripteur,"article");
				y = atoi(t.c_str());
				return "\n"+this->getCategorie(x)->getArticle(y)->toString()+"\n\n1 : Editer\n2 : Retour";
				
			case EDIT_ART :
				return "Saisissez votre texte (il remplacera celui deja present)";

			case QUIT :
				return "%quit";

			default:	
				return "reponse invalide";
				break;
		}
	}

